package mc

// 控制器接口
type IController interface {
	InitializeBefore()                                 // 初始化Controller前回调
	Initialize(c *Context, self IController)           // 初始化
	InitializeAfter()                                  // 初始化Controller后回调
	ModelInitializeBefore()                            // 初始化Model前回调
	ModelInitializeAfter()                             // 初始化Model后回调
	ModelListRenderBefore()                            // 列表界面渲染前回调
	ModelListQueryBefore(qo *QueryOption)              // 查询数据前回调
	ModelListQueryAfter(result *Result)                // 查询数据后回调
	ModelAddRenderBefore(data map[string]interface{})  // 添加时渲染前回调
	ModelAddSaveBefore(data map[string]interface{})    // 添加时保存数据前回调
	ModelAddVerifyAfter()                              // 添加时验证数据后回调
	ModelAddSaveAfter(result *Result)                  // 添加时保存数据后回调
	ModelEditRenderBefore(data map[string]interface{}) // 编辑时渲染前回调
	ModelEditSaveBefore(data map[string]interface{})   // 编辑时保存数据前回调
	ModelEditVerifyAfter()                             // 编辑时验证数据后回调
	ModelEditSaveAfter(result *Result)                 // 编辑时保存数据后回调
	ModelDelBefore(ids []string)                       // 删除数据前回调
	ModelDelAfter(result *Result)                      // 删除数据后回调
	UpdateCache(result *Result)                        // 更新缓存
	GetPageActionName() string                         // 获取页面配置使用的操作方法
	ModelViewRenderBefore()
}

// 控制器基类
type Controller struct {
	Context   *Context    // 上下文
	Self      IController // 当前控制器实例
	Model     *Model      // 模型
	ModelPage *ModelPage  // 模型页
	//Template  string      // 模板
	//Assign    *Assign     // 内容分配器
}

// 初始化Controller前回调
func (ctrl *Controller) InitializeBefore() {}

// 初始化基类
func (ctrl *Controller) Initialize(c *Context, self IController) {
	ctrl.Self = self
	// 初始化之前
	ctrl.Self.InitializeBefore()
	// 开始初始化
	ctrl.Context = c
	//ctrl.Context.Template = "" //  fmt.Sprintf("%s/%s_%s.html", ctrl.Context.RealModuleName, ctrl.Context.RealControllerName, ctrl.Context.ActionName)
	//ctrl.Assign = &Assign{
	//	Context: c,
	//	Model:   &Model{},
	//	Result: map[string]interface{}{
	//		option.Response.CodeName:    option.Response.SuccessCodeValue,
	//		option.Response.MessageName: "",
	//		option.Response.DataName:    nil,
	//	},
	//}
	// 初始化之后
	ctrl.Self.InitializeAfter()
}

func (ctrl *Controller) GetPageActionName() string {
	return ""
}

// 初始化Controller后回调
func (ctrl *Controller) InitializeAfter() {}

// 初始化Model前回调
func (ctrl *Controller) ModelInitializeBefore() {}

// 初始化Model后回调
func (ctrl *Controller) ModelInitializeAfter() {}

// 列表界面渲染前回调
func (ctrl *Controller) ModelListRenderBefore() {
	return
}

// 查询数据前回调
func (ctrl *Controller) ModelListQueryBefore(qo *QueryOption) {
	return
}

// 查询数据后回调
func (ctrl *Controller) ModelListQueryAfter(result *Result) {
	return
}

// 添加时渲染前回调
func (ctrl *Controller) ModelAddRenderBefore(data map[string]interface{}) {
	return
}

// 添加时保存数据前回调
func (ctrl *Controller) ModelAddSaveBefore(data map[string]interface{}) {
	return
}

// 添加时验证数据后回调
func (ctrl *Controller) ModelAddVerifyAfter() {
	return
}

// 添加时保存数据后回调
func (ctrl *Controller) ModelAddSaveAfter(result *Result) {
	return
}

// 编辑时渲染前回调
func (ctrl *Controller) ModelEditRenderBefore(data map[string]interface{}) {
	return
}

// 编辑时保存数据前回调
func (ctrl *Controller) ModelEditSaveBefore(data map[string]interface{}) {
	return
}

// 编辑时验证数据后回调
func (ctrl *Controller) ModelEditVerifyAfter() {
	return
}

// 编辑时保存数据后回调
func (ctrl *Controller) ModelEditSaveAfter(result *Result) {
	return
}

// 删除数据前回调
func (ctrl *Controller) ModelDelBefore(ids []string) {
	return
}

// 删除数据后回调
func (ctrl *Controller) ModelDelAfter(result *Result) {
	return
}

// 更新缓存
func (ctrl *Controller) UpdateCache(result *Result) {
	return
}

func (ctrl *Controller) ModelViewRenderBefore() {
}